Don't get me wrong - I like the general idea. As usual, the devil is in the details...
I'm not sure how you'd want to express it, but I think it's important that you can project fields from both the document and the index simultaneously. This is what happens client-side right now when you use AsProjection. You only need to store the index fields you don't have in the document, but all the time I see people indexing and storing everything even when its unnecessary for the result they are after.
The most common example is mapping the Id, even though it is already mapped implicitly. Every so often we see the error about "__document_id is already mapped...", and the solution is to call it something other than Id - like UserId. But then you get the same data in the index twice. It would be great if the API guided you to not set up things like this.
I'll I'm saying is that with ResultsAreProjectionsFromIndex = true, one should still be able to get at the document properties. Otherwise, people will index all fields in the document when they should just be indexing a few fields.
Regarding using the Indexed Properties bundle - you called it Indexed Document, is that different/new/upcoming? If so, it would be great to put some of the same techniques you have for scripted patching to use. Rather than specifying specific fields to dump the results to, you could supply a bit of javascript that is used to write the index results to a document. Or to a NEW document, or to multiple documents, or added to arrays or dictionaries within a document. Etc.
Then you could get multi-reduce just by having a new map/reduce index over the resulting document. One would have to be careful about infinite loops in the chain of Doc-Index-Doc-Index-Doc-Index, etc.