1. Document storage. Although there aren't dedicated APIs, you can already do this by creating a chain with max-std-op-return-size set to a high number of bytes in the blockchain parameters, and running a node with txindex=1 in the runtime parameters (set this before the chain starts). You can then use the appendrawmetadata API to add arbitrary metadata to a raw transaction, and this metadata can include the document's contents. The transaction ID of the sent transaction can be used as a reference to the document, so the document can be retrieved using the getrawtransaction API with the second parameter set to true.
2. I'm not sure I understand the question - you can use the full CLI and API if you run nodes on Digital Ocean.
3. Maximum number of assets. There is no limit and unless you call listassets with no asset identifier, everything scales very nicely to millions of assets.
4. Blockchain messaging. No ETA on this yet, but you could adapt our CoinSpark messaging stuff to work with MultiChain if this is important to you. Take a look at:
http://coinspark.org/developers/messages-introduction/
https://github.com/coinspark/message-server
https://github.com/coinspark/coinspark-message
This last library is designed for Bitcoin Core, but MultiChain is fully backwards compatible with that, so it should not be a problem. Just change the CONST_BITCOIN_CMD path in coinspark-message.php and set CONST_BITCOIN_FEE to 0.