...
Pools have an incentive to co-locate because it reduces the time to download blocks from each other, during which they need to SPV mine an empty block.
...
1) The need for SPV mining is an urban legend
It is driven by an unsubstantiated excuse to very marginally reduce the average small amount of time necessarily spent mining on stale work
Empty blocks are a reward paid for doing no new transaction confirmation ... and interesting that I don't see the non-mining community getting up in arms about it even though it's been going on for quite a while ... ... ...
2) Some pools SPV mine empty blocks, other pools 'supposedly' verify the block before mining an empty block
e.g. Eligius say they don't SPV mine but still send out empty blocks due to crappy pool software - that I still to this day wonder why people mine there when they know they are getting paid well under the expected payments of low fee based pools
I've run comparisons between my pool, that never elects to ignore gbt transactions available, and eligius that mines empty blocks, and my pool work change time averages significantly faster.
... also so far my pool has never mined an empty block - it would only happen if there were no transactions supplied by the gbt call
3) The cause of SPV mining is Luke-Jr
On his pool he had a period of high orphans (that other pools DID NOT have at the time) and relegated the blame elsewhere rather than his pool code.
One of his solutions he implemented was to have his pool mine a maximum of 32 transactions per block for 5 months
He wrote the gbt code commit in bitcoin core.
He bypasses the gbt call on block changes due to his excuse that his gbt code in bitcoin is too slow
Other pools have copied this idea from him.
Other pools now use the extended version of this known as SPV where they don't fully check the block before generating a block header
Thus a little history about SPV
Since one important premise in your opening I quoted is incorrect, you may want to revise it all ...