Aggregation of a collection of object's nested array-properties
From a once over : 


This is a problem : var search = JSON.stringify(obj); because JSON.stringify() does not guarantee any order.. To be completely correct I think you are going to need to pass the properties to arrayObjectIndexOf that need to get compared ( that is, if uniqueness is determined by only comparing the provided properties, otherwise you are in a world of trouble )
"Inner property is not a collection!" &lt;- Perhaps props[l-1] + " is not an array!", then you will provide which property is not an array, and be clear that you are expecting an array
"Property doesn't exist!" &lt;- "Property " + props[j] + "does not exist" will give a better feedback as to which part is not working
JSHint.com could only find semicolon issues, which is good