actually, with RhinoScript it is not as convoluted as you may think. The methods are returning either a single value (whether it is a string, integer, Boolean etc.) or an array - a list of values. Many times the array would be just a list of the same values, but sometimes each value in the array will be of different type, sometimes even another array inside the main one. But all of this is described in detail in RhinoScript help file which I think is actually very well documented.
For example, check out the RhinoScript Help File for the example methods below:
Rhino.PluginName : always returns a single value: string
Rhino.ObjectLayer : returns a single value, but the type depends on the method input
Rhino.JoinCurves : returns an array of same type - object ID strings
I have been relying heavily on the documentation, but the part that is missing is meaning of the contents in the returned array elements.
The Help file says: “Returns: An array of strings identifying the newly created curve objects if successful.”
Rhino.MeshClosestPoint: returns an array of 2 different value types (3d point as array and a face index)
Rhino.GetObjectGrips: returns and array of mixed data (grip owner(object ID string), grip index (integer) and 3d point of grip location (array of x,y,z values)
There are even more complex ones, but in each case the Help file describes the returned values in detail.
Obviously all of the above methods (and all other ones in RS) will return Null if something went wrong or missing.
Hope this makes more sense now.