Just in case you are not super familiar with AMS, here is how it works:
When a cross-scene binding is detected, like when you create a reference from a field to a GO in another scene, AMS serializes the binding and save it in an AMS gameobject in the scene; (see attachment 1)
Whenever cross-scene references need to be restored, like when you reload the scenes, AMS parses all the bindings it previously serialized and assign the referenced objects back to the fields;
Previously, we created our own blackboard resolver to handle both steps above,
in the saving phase, we save the bb variable key name to the AMS object in the “Data” array,
in the restoring phase, we add the variable back by calling blackboard.SetVariableValue;
there’s also some special care we added to support Lists and Dictionaries in blackboard.
So as you suggested, with a little change to our current code, solution 2 would work.
However, after digging a little deeper in both NodeCanvas and AMS code, I believe it is possible to make AMS support NodeCanvas out of the box, because basically all the default AMS resolver does is assigning the deserialized referenced object value to the source field via reflection.
Currently it does not work with Blackboard for some reason as blackboard does not allow adding elements to either the _objectReferences list or the _References field of SerializationPair. (See attachment 2). I think if blackboard can be updated by manually updating these lists, AMS would work by default.