Nate, would you consider always adding the original dimensions of the page used to compute the "xy" and "size" of each region in the atlas? With this, normalized texture coordinates could be computed and the texture dimensions wouldn't matter.
tex_matrix.identity();
tex_matrix.scale(1.0 / page.w, 1.0 / page.h); // region in page pixel units
tex_matrix.translate(region.x, region.y); // from atlas.region.xy
tex_matrix.scale(region.w, region.h); // from atlas.region.size