I have figured out how to use the 3D cursor (placed at the corner of one cube) and a selected vertex of another cube and snap them together. I can repeat this process to get all 4 cubes positioned where I need them. Now I need to be able to set a new origin at an outside corner of one of the cubes and be able to move all 4 connected cubes as one during an animation.
There are several ways to do this, the easiest of which would be to join (shortcut Ctrl–J) the four cubes into a single object. Next would be to parent each of the three cubes that do not have the corner you want to use to the cube that does.
In either case,
- select the cube that does have that corner.
- go into edit mode.
- select just the vertex that you want to put the origin at.
- move the 3D cursor to that point. (shortcut Shift–S2)
- go into object mode.
- set origin to 3D cursor. (shortcut Right-Click and select Set Origin → Origin to 3D cursor)
That will move the origin to the correct corner.
(or you could, as suggest in a comment on the question, add an empty at that corner and parent the cubes all to that empty.)
The first approach, joining the meshes, works best if you don't want the 3 dependent cubes to move away from the cube with the corner. The second approach, parenting the dependent cubes to the cube with the corner works better if you want the freedom to move the cubes with respect to each other. The third approach, parenting to an empty, is on a par with the second approach, but requires an additional object, the empty.
There are other ways, using constraints or drivers, but delving into those would just be an exercise in over elaborate design.
As moonboots commented, here you go:
Add an empty to whatever place you like (corner of your cube).
Select all your cubes, Shift-Select your empty at last.
Now if you move or rotate your empty, all cubes will move with it.
This solution has the advantage that you still can move each cube on its own.