Hi.
preload doesnt work that way. preload happens on compile time, therefor it only accepts constants.
question 1
... no
question 2:
you cannot use preload for this. You dont have to have a list in another script. Just write youself a function to initialize this class. Then load your assets before the "action" starts.
question 3:
you dont have to use them right away ... have a look
extends BaseClass
var my_asset
var my_other_asset
func load_assets():
#just load here
my_asset = load("res://thing to load.tscn")
my_other_asset = load("res://other thing to load.tscn")
func use_asset():
#instance it here
var thing = my_asset.instance()
thing.do_stuff()