The variables defined in Role A should be scoped for A unless defined within your inventory or any of the other places outside the role that variables are defined.
If variables from a role were implicitly available broadly through their declaration, you can have nasty side effects and potential security problems.
The public option while including role that is described as
This option dictates whether the role’s vars and defaults are exposed to the playbook. If set to yes the variables will be available to tasks following the include_role task. This functionality differs from standard variable exposure for roles listed under the rolesheader or import_role as they are exposed at playbook parsing time, and available to earlier roles and tasks as well.
Ah, so the documentation in this regard might be very literal where the role variables are only available to the playbook and not the role importing the role:
This option dictates whether the role’s vars and defaults are exposed to the playbook. If set to yes the variables will be available to tasks following the include_role task. This functionality differs from standard variable exposure for roles listed under the roles header or import_role as they are exposed at playbook parsing time, and available to earlier roles and tasks as well.
role “vars” are scoped to the play, not the role. role “params”, which are different than vars, are scoped to the role. include_role and import_role do not support params, only vars.