I spent some time trying to figure out how to do this without using constraints but so far I've only come close to a full solution.
The ARRAYPATH works as long as you can tell it how many objects in the array.
A User Parameter can do this by entering its name as the number of items in the array properties.
Using just parematers, a Block Table is the only tool that can assign a value to a User Parameter.
OK, I'll use the Width parameter length to assign a value for the User Parameter based on ranges of length values.
Block table doesn't accept ranges ... a Lookup does ... but a Block table can't see a Lookup value
Ok, I'll use a double Lookup, with ranges for the Width parameter to supply values for a new horizontal parameter and use it's value in the block table. This makes the horizontal parameter have incremental values as the Width randomly changes.
No go, the new parameter isn't available as its already been used in the Lookup.
Ok, I'll add another horizontal parameter and use the first one to operate it with a chained stretch action and then use that second parameter in the block table.
This worked!
Now on the array in the other direction, same approach as the first.
.... there's only one block table available.
Ok, enter both linear parameters and both user parameters into the table in a matrix of values to supply the correct two user parameter values based on the two linear parameters. (this could balloon exponentially with values so I just entered a few to test it out)
No go. The user parameters don't change and I'm out of ideas.
So, I trimmed the table back to work in one direction and posted it as an example.
I'm not familiar enough with the block to rebuild it using just Constraints. (and don't mix and match constraints with parameters, tried it, it got ugly) The user parameters can easily use the value of a constraint in a formula to derive their value and pass them on to the arraypaths.

Mark Mccall
CAD Mangler

VHB - Vanasse Hangen Brustlin, Inc.
Linkedin