* I suspect that we long ago passed the point where the majority of blocks are generated by software other than the reference client. I could very easily be wrong about that, but I think that most pools are running custom software to generate blocks according to their own local rules.
I'm certain that you're wrong there. The attempts that I'm aware of that have gone even somewhat close to this have resulted in invalid blocks, so if it was widely being done the invalid blocks would probably be noticeable.
Really? Assuming that you have the transactions already, assembling them into valid blocks is incredibly easy. Wasn't that the whole point of getblocktemplate?
It is not as easy as it sounds since you have to be carefully choosing those not only unconfirmed and valid, but those that have inputs confirmed in previous blocks and you have to order the rest such that they can be processed in that order (since outputs might be reused in the same block). You also have take into account various limits for the block in size and in number of signatures... to mention a few.
In addition you might have further preferences on transaction selection as miner. Even on the question on which block to build if two are competing.
There is a whole lot a server that prepares block templates can do for you.