I spent a decent amount of time thinking about how to denominate the receiving address as well. One solution I thought of, is not nearly as fancy as what you describe but sort of works. You could just have the recipient provide a concatenated list of addresses from his wallet than can be used to do denominate the transaction. This could be called a "Dark" address or something else equally silly

. and would look something like this:
ABCDEFGHIJK
where each letter represents a different address in the receiving wallet. The "Dark" address would be long as fuck, but it would get the job done - on the blockchain there would be no record of a special "Dark" address ever existing, only the individual addresses, A, B, C etc.
The problem with this idea is it reuses addresses. If the receiver got coins sent in two separate transactions it would be easy to see which addresses he owned because they would appear in both transactions. All you would have to do is look for when A address is in a transaction and then see if there are any other addresses which appear with it each time. It would be trivial for a computer to do, unfortunately.
If these addresses could be new addresses that are procedurally generated each time your idea would be very good.
Damn private keys.