Instead of defining b1 to be an Integer, define it as a Calculation. Within the definition of a calculation is a choice of Result type. Select Integer result. Then, there's a space for entry of an expression. While in this section, press the +Field button, and you'll get a drop-down list containing the fields of the current library and of any linked library. The linked ones will be of the form library.field, so you should see A.a0 as one of the choices. Just select that field, and say you're done, and you should have what you're shooting for.
So, I'm confused. Let's not worry about which library we call the parent and focus on what you want to do. I'm assuming now that it is a one-to-one relationship. Otherwise, it won't work, because if many a3s link to a b0, each b1 will get clobbered by the a0s of multiple entries.
You can certainly implement a trigger of type "Create a new entry / Before saving the entry", where a0 will have its new value already. The script can follow the link and, if permission is set for it, plug b1 with the value of a0. The tricks would be:
1. Set permission for the trigger to access library B.
2. var b = entry().field("a3"); // b is an array now, though you say there will be only one entry, so b.length is 1, and b[0] is the entry
3. b[0].set("b1", entry().field("a0")); // Set the value