You can do it with transforms applied as well – the main difference is you need to make sure you create your Empty (for the Object Offset) at the ORIGIN of your object.
Select your object then use Shift+S to set your 3D cursor to the origin of your object, then create the empty (or Shift+S to move your existing empty to the origin). If you used an Object-Offset Array with that empty, and if there isn’t any scale or rotation for your empty, all the array copies should be in the same spot.
Keep in mind that if you have the Empty aligned with the objects origin, any ROTATION of the Empty will cause the mesh to rotate around the OBJECT’S origin. This can get very confusing very fast when you have an object’s origin that doesn’t align with the object, then an empty that is moving and rotating around.
If you need more precision in your animation or shape, you may want to use the “Group-everything-to-a-master-empty” approach on a new piece, then move that piece into place.