You can use MultiChain to store data in a chain (either on-chain or using 2.0 alpha 3, off-chain with only the hashes in the chain), and set things up using blockchain parameters so that the fee is proportional to the size of the data. The fee won't go to a specific user but will be collected by whoever confirms the corresponding transaction in the blockchain. The fee also won't be decided specifically by the data owner.
As for the questions under 2, you cannot yet do this with MultiChain but it would be a relatively natural extension using off-chain stream items. Basically, a request for delivery of an off-chain item would include an offer of payment. If accepted, the payment would take place on-chain, and then the delivery would take place.
Similarly for 3, this isn't natively supported by MultiChain, but of course you could build an applications which looks for these payments and decides as a result whether or not to keep storing the data.