Interesting...is the "tips" of the chains part documented?
From reading this that doesn't appear to be the case:
https://en.bitcoin.it/wiki/Protocol_specification#getblocksIt looks like it gives you the 10 most recent hashes and then starts skipping in greater and greater intervals back to the genesis. It gives a pseudo code implementation there.
The spec you posted was helpful. Thank you. I was wrong about the tips part. Though I think my method would be correct, the real client deals with forks by (as you note) a geometric search of the old blocks for a common ancestor. Seems wasteful to me but it is what it is.
The rest of my explanation appears to be correct.