Is there a way to use meshes as basis for a group of smaller meshes?
This is just an aid to modeling, not a fully-automated 'fill my wall with bricks' system.
This example - X across, Y up, Z out

Make a template 

My bricks are 2x1x1, so this starts with an composite offset array of 2x1 plane primitives.


Array 1: Relative Offset of 1 in X,
Array 2: Relative Offset of 1 in Y, 1/(2*Array 1 Count) in X,
Array 3: Relative Offset of 1 in Y.


(I put the X-offset in Array 2 into an expression driver, to automate it when I changed the width of the wall.)

Result:



Make a group of your bricks, correctly oriented


CtrlG Group the variants of your bricks.


Note their orientation - in the result all the duplicates will face out in the object's positive Y, across in Z, and up in X. This means that if you rotate their meshes in edit mode, that counts as more variants.

The origins of the brick objects will lie on the template.



Emit the group of bricks as a particle system from the template

I've illustrated all the settings that matter. Things to note:


The only settings are the ones shown, everything else is switched off. (No physics, etc.)
All the particles are emitted on frame 1.
The number of particles is (count array1) x count (array2) x (count array 3).
Use Modifier Stack is checked.
You can change the Render > Size setting to put some mortar between the bricks, if you render the emitter, too.




You can make copies, change the array dimensions, and fit corners....



At any stage, you can hit 'Convert' in the modifier put into the template's stack by the particle system to make all the bricks real instances. Identical bricks still share Mesh Data. If you want to edit individual bricks, go into the brick's Data tab, and click the 'number of users' section of its title bar to make the mesh data single user, so your edits don't affect multiple instances. To do that to multiple bricks at a time, hit U > 'Object and Data'

In this .blend, the driver panel is open, to show the way Array 2 is set. If you change the dimensions of the array, you will have to go in and change the number of particles to suit, though.. that can't be driven.