Custom transient core implementations could benefit from knowing two things:
1> that core discovery is over
2> that all cores that are going to be loaded have been loaded, i.e. all loadOnStartup cores are done.
It should be trivial to add a method to CoreContainer like "isLoaded" that would answer the first question since you can't get past the load() method without all the cores being discovered. I think this is a more generally useful bit of information than just core discovery is done.
As for the second, that too seems trivial, just add a method to CoreContainer that returns the number of entries in SolrCores.currentlyLoadingCores.
I'll add this in a few days unless there are objections.