Goal
To capture everything during collection and to decouple validators from host.
Benefits
At the moment, Validators may validate things unrelated to an instance.
For example, in the case of a rig and a number of utility nodes, such as measurements, the utility nodes aren't included in the Instance and will not get extracted, yet they are still subject to validation as each Validator handles their own collection.
When centralised, measurements and other unrelated nodes can be explicitly discarded and thus never subject to validation. The concept can then extend into more advanced use, where the end result is an Instance that fully captures what the Instance represents.
Implementation
Currently, collectors gather a minimum amount of information in the scene, leaving most of the gathering to Validators.
For example, a validator could look like this.
for node in cmds.ls(type="mesh"):
assert cmds.getAttr(node + ".color") == "green", "%s is not green" % node
Which manually gathers additional information beyond what is available form Collection. Instead, a validator could look like this.
for node in instance:
assert node.color == "green", "%s is not green" % node
For which a Collector could look like this.
for node in cmds.ls():
node = type("MayaNode", (object,), {})
node.color = "green"
instance.add(node)
color
then represents static data to be validated at a later point.