yes, that would work. But it makes everything needlessly complicated.
You where right when you said that all your quads are the same in object space. But the picking location isn't... ;-)
So what the article meant, I think, was that you could transform the PICKING LOCATION into the object space FOR EACH OBJECT, then perform a simple min/max test with that object. No need to transform four corners just so you end up with a totally ugly general rectangle inclusion test.
so I just need to perform this:
for all quads
vec4 objspace_mouse_pos = inv_mvp_of_quad * vec4(mouse_x, mouse_y, 0, 1);