me too "thinks that", don't remember where i read something about a central hub patch for the pools to announce it's blocks very fast. We could connect to that hub instead of patching bitcoin, what do you think
Maybe that was my suggestion a few pages back?
Anyways:
For detecting (at least quite) reliably which pools solved which block we need an alternative implementation of the P2P protocol of bitcoind itself.
We need a pure listening node that can connect reliably and steadily to a lot of bitcoind clients and keep this connection alive.
We do NOT need direct connections to pools, what I suggested was to measure from which nodes you FIRST get a block announce (since we just listen and do not relay, we should get a "new block found" from node 23, then a few miliseconds later from node 42 and so on) and in which order. Still there might be a certain churn rate in the network, but with a little bit of luck (and enough connections/quickly enough found blocks...) it should be possible after an hour to say that blocks which are first announced by node 23 and then node 42 are from deepbit and blocks that are first announced by node 79 and then node 38 are from btcg for example.
Of course it would be easier if we connect directly or to neighbours of pools (with ~20 000 nodes online this is kinda hard to just randomly get out of luck though) but even a bit further away we still would hopefully see some patterns (which would naturally change over time as intermediate nodes leave and come who verify + relay blocks slower/faster) that would only shift slowly over time.
This entity should however in my opinion be open source (and hand out the acquired data via an API for free) BUT be hosted on Google App Engine or something similar, as I'm not 100% sure if it does not harm the network to have some well connected black holes in there (I seriously doubt it, but you never know...)
Advantages:
No need for ANY statistics besides eventually numbers of solved blocks (not even that is really needed as you get payouts that can be traced back to generations).
No way to delay or to develop countermeasures, as pools HAVE to rely on announcing their blocks to all neighbours as fast as possible. We just count on the fact that the pools have some different neighbours and this way new block announcements spread differently though the net.
Once in place this can be even useful beyond finally getting rid of proportional pools: It might be useful to find out if pool operators really don't steal blocks, detect hidden pools (or at least proof their existance) and/or huge solo miners and maybe other stuff I didn't think of yet.
Disadvantages:
Countermeasures from pools would involve hiding any kind of statistics to the users (noone is allowed to ever see which blocks are found by it's users) and additionally putting income of several pools in a mixing cascade before paying out. Even then we could probably guess that Pool X has found a block and by trying out deduct which one Pool X is after some time though. These countermeasures would be even worse than just faking/delaying stats for users there, but the fanbois would still praise them for their pool hopping fight.
It also might not be as reliable as APIs, but these fail also all the time (as you see).
Also it might be hard(er) to track small pools - hopping deepbit + btcguild should anyways be far more fun though, hm?
Most likely some serious development work needed (probably, I have no idea how complex the P2P protocol of bitcoind really is)