Some rambling thoughts from last week:
Ideally it would return the CGThing to declare and the CGThing to unwrap and the caller would insert the nullable() check + case... See if we can do that. Might need to return the nullable case CGThing as well.
As in, the return value is likely to need to be a tuple of CGThings of some sort.
Bug 748267 part 1 more or less ended up doing this, I think. We can reevaluate once that lands.
I'm going to call this good now that bug 748267 is fixed.