This is legal according to the GLSL 4.20 spec, but in the ARB_shader_image_load_store extension the binding is not listed.

It is legal. The "binding" part isn't covered in the ARB_shader_image_load_store extension, because the binding feature for samplers and images is in ARB_shading_language_420pack.

I'll be investigating further tomorrow, but it appears that the problem involves a combination of qualifiers. A test shader I wrote based on your example above, fails with the declaration as above, but compiles successfully without the "writeonly" qualifier.