Can we keep it all in the forum so other developers can learn from the discussion?
thingResults is just an ordinary javascript object, set it on startup like "this.thingResults = {};". Then you can use it like a map of thing to result by creating different properties on that object.
You just have to do the same thing for expressions: use an action to request the data, then trigger a condition when the result is available, and in that event the user can use the expression to retrieve the result. So it's identical but instead of returning true/false in a condition you set the return value via ret.