You meet most of these rules, though you do have to download blocks from multiple peers.

The suggestion in that thread were for a way to compactly indicate which blocks a node has.  Each node would then store a sub-set of all the blocks.  You just download the blocks you want from the node that has them.

Each node would be recommended to store the last few days worth anyway.