An idea that was proposed before was to delegate the conversion (and the patents burden) to the OpenGL drivers, something like using glCompressedTexImage2D() / glGetCompressedTexImage(). Not sure whether there are hidden issues with that approach (except, well, requiring an OpenGL driver with compressed textures support), but at a first glance it doesn't look as something particularly hard to do.
Good idea. This new patch implements this approach. It seems to be working perfectly at least with the nvidia blob. It is also much smaller than the previous one, and doesn't require hacks like inverting colors and so on.