The task-less role is good because you can capture the dependency fully in the role (via meta/main.yml dependencies) without depending on some externally defined data. Further, your data would follow your roles if you want to use those roles in another project.
The group_vars/all could also work well in your design IF your roles that depend on those "shared variables" are designed such that they either (1) fail when those variables aren't defined or (2) you assign sane defaults in the role for the "shared variables". (1) is a common problem for me so I created a
required-vars role that i reference in meta/main.yml dependencies to ensure per-role variables are defined and/or assigned.