You forget that the user can randomly focus on any instance. Or unfocus. So we cannot assume there will be a keyboard ready.

Even if we would do things through add/remove_widget, that would not affect things later and at any point focus can change randomly. Unless I didn't understand what you meant.

The performance cost of releasing/requesting a new keyboard is minimal when multi is not enabled. Even if multi is enabled, the user should probably have set the keyboard property to some pre assigned groups of keybaords, otherwise a new keyboard will be requested for every focus instance (unless it comes through tab, because then the old keyboard will be released). So I'm not sure it's worth transferring keyboards, instead of simply setting focused to True/False and letting it deal with the keybaord.

But I can do it for the case where focus is set through tab, if you think it's a good idea.