Since ETags are optional in the HTTP-1.1 spec, I think we should all just be able to turn them off in our browser. But I can't find an about:config setting in Firefox to do it. WTF, Moz people? Fixing the protocol itself seems possible, too. Have the client side compute a hash of the image (once, upon first retrieval of the image) and cache that with the image. The hash algorithm will be specified in the protocol. Then when the client side wants to know if the image has changed, it sends the hash that it computed. No choice on the server's part, no ability to make the client store an ETag full of arbitrary data. (Yes, malicious servers could perturb their images for every HTTP connection, and precompute the hash, and then store that hash so when the browser came back later, the server could id the browser from the perturbed image hash the client sent. But at least this would require running an expensive hash function for every connection. For that matter, cut out the middle-man. Any server that uses dynamically generated HTML can embed a 1x1 transparent GIF in the page, the URL to which is uniquely generated URL. Then any GET request on that uniquely generated URL would identify the browser. But a cache clear would solve both of those, so at least we'd have a counter-measure...)
Gratipay (formerly gittip) does something like this, except without the complications: patrons choose to give a weekly recurring amount of money to... well, anyone with a twitter or github account.