In lightweight but not super-lightweight clients like with BitCoinJ, you need the transactions in the wallet as well (technically just the outputs). That isn't exactly a huge burden, whilst today you have to download whole blocks to find them, in future the filtering could easily be performed by the remote nodes themselves.
It's ok, this is helping me clarify the concept for myself as well.
I'm focused on recovery of wallet information rather than explicit storage of the wallet.dat file. I agree that having the private keys in the cloud is redundant, but there's a subtle difference in restoring wallet information - the deterministic method relies primarily on an algorithm while distributing keys relies mainly on the network. The former uses a passcode to reconstruct the wallet while the latter uses a tag/passcode combination to reconstitute it; rebuilding vs. unlocking. The end result is the same - the wallet can be recovered.
I really like the deterministic approach - IMO it's an essential feature for integration into the main Bitcoin client, though I don't see how it can cope with rapidly-changing contents. If that's true, it may be best suited for stable wallets with a low frequency of disparate transactions (savings account). Searching for tags/keys would still require downloading the blockchain, but all of the relevant information can be obtained. That might be more appropriate for protecting against loss of a high-frequency wallet (checking account).
Part of my reasoning is that I trust the Bitcoin network because of its structure. Even doing everything carefully, hosting a wallet introduces at least one new potential point of failure (the entire Bitcoin network could fail, but that's far less likely) with numerous other trust factors to consider.
Minimum requirements to recover wallet information (to my knowledge):
Method | |Wallet.dat | |Determ. Server | |BTC Network |
Encrypted Wallet | | X | | | | |
Deterministic Algo | | | | X | | |
Distributed Keys | | | | | | X |