So, as I said, don't use yield (like ever). The cases where it is needed are very advanced and at that point you will understand when you need to use it (for example asynchronous network code). It is best just to avoid it altogether as it creates way too many problems as you have just seen.
To answer your question, ready on children and parents will always be called in the same order. Each child is initialized one by one, and when they are all ready, the parent will become initialized and then ready is called.
For this reason, you should almost never call up in the hierarchy (or to the side) when dealing with ready or initialization code. Meaning do not do anything with the parent, the parent's parent, or any siblings. Try to make each script self contained. If there are links that need to be established, do this on the parent. When the parent is ready, you are guaranteed all children are ready, and you can set their variables freely.