here is the script for the array randomizer (at the bottom)
make sure that you have 3 empties: Empty, Empty.001, and Empty.002
the names are important (unless you wanna modify the script)
you can do this to any mesh, but i would reccommend a cube, because anything else can get way too many faces, way too quick.
make sure that the modifier stack looks like so:

other than that, enjoy.
SCRIPT BELOW
import Blender
from Blender import Mathutils
from Blender.Mathutils import *
########
#Change the below values to alter the range of
#randomly selected numbers for each propery.
#Scale is kept in proportion, otherwise it
#causes oddities.
Press ALT + P in this window to
randomize the array structure
#########
#minimum location offset
minloc = -5
#maximum location offset
maxloc = 5
#minimum rotation (in degrees)
minrot = -90
#maximum rotation (in degrees)
maxrot = 90
#minimum scalar
minscal = .5
#maximum scalar
maxscal = 1
minrot = 3.141*(minrot/180)
maxrot = 3.141*(maxrot/180)
randscal = Rand(minscal,maxscal)
emp1 = Blender.Object.Get(‘Empty’)
emp1.setLocation(Rand(minloc,maxloc),Rand(minloc,maxloc),Rand(minloc,maxloc))
emp1.setSize(randscal,randscal,randscal)
emp1.setEuler(Rand(minrot,maxrot),Rand(minrot,maxrot),Rand(minrot,maxrot))
randscal = Rand(minscal,maxscal)
emp2 = Blender.Object.Get(‘Empty.001’)
emp2.setLocation(Rand(minloc,maxloc),Rand(minloc,maxloc),Rand(minloc,maxloc))
emp2.setSize(randscal,randscal,randscal)
emp2.setEuler(Rand(minrot,maxrot),Rand(minrot,maxrot),Rand(minrot,maxrot))
randscal = Rand(minscal,maxscal)
emp3 = Blender.Object.Get(‘Empty.002’)
emp3.setLocation(Rand(minloc,maxloc),Rand(minloc,maxloc),Rand(minloc,maxloc))
emp3.setSize(randscal,randscal,randscal)
emp3.setEuler(Rand(minrot,maxrot),Rand(minrot,maxrot),Rand(minrot,maxrot))
Blender.Redraw()
END SCRIPT