Hi Ali
I'll [also] have to add a disclaimer on this one. At a time having got to making model-operations, I tried to make a mirror-function. And failed. It puzzled me for a while, but there were so many operations to implement that I just passed on. In a new release of the software i used (directX), I noted that Microsoft announced that they had added 'mirror' to the functions. This announcement reminded me, that it might not have been me that was fowl.
Flipping an axis seems reasonable. The data you have are in 'world-coordinates', so, to have the axis-flip throughout the whole setup, you'll probably have to start out in object-space.
In my last scribblings to your other post I devised a way to get from the world-space to the object-space for each block. In the perspective of the problem you present here, there could be a slight change in my suggestion.
If you subtract the center-vector from the position-vertices of a block [if need be], you have the block centered at (0,0,0). It's the alignment of the object-vectors here that you'll have to 'try' to get right (it's either one or the other way round the axis the object-coordinates should be turned).
As an educated geologist I have spent an embarrassing lot of time on getting to gribs with the 'matrix' thing ... it may take time for you too. In formal terms, you are looking for the inverse of the matrix that brought the object from object-space into world-space. If you keep translations and other transformations apart, the inverse matrix of turning the object alfa degrees around the y-axis is the one that turns the object -alfa around that axis. As for translation,there is the same obvious relationship. As you have noticed: the outcome of using a rotation matrix differs depending on the position [read:applied translation] of the object (in other words, it's a must to bring the object to (0,0,0) before involving the rotations, being it forward or inverse).
EDIT:
What you are up against is the program-need for efficient code. All small matrix operations are simple, but the draw-call can get away with just one transformation if you clamp all matrices into one single matrix before the call. Processing has it's own implementation of this (through the push/pop-matrix)