The idea is pretty well thought, but i have a problem with the <code>match</code> param. If you consider to match a data binding, the structure is:
<ul><li>Get all widgets binded to a certain point in the data model.</li><li>Loop over the.</li><li>Check if current widget is also in wished context.</li></ul>
And the current function operates the other way round:
<ul><li>Get a certain context.</li><li>Iterate over structure recursively.</li><li>If current element is a widget, match the condition.</li></ul>
So with the given Widget structure it is not possible to match an arbitrary condition.

To have a comparison between the current function and the 'data binding approach', the approach would look like:
<pre><code>
var path = datapath.split(".");
var bindings = ctxt;
while (path.length > 0) {
        var node = path.length == 1 ? "aria:listener_" : "";
	node += path.shift();
	bindings = bindings[node];
}

for (var i = 0; bindings.length>i; i++) {
	var behavior = bindings[i].scope;
	if (behavior.$class == widgetType && behavior._context._id == ctxt._id) {
		if (index == 0) {
			return behavior;
		} else {
			index--;
		}
	}
}
</code></pre>

Of course one could make that a <code>match</code> function, but i dont know if the is this makes sense.

Any ideas how to solve the problem?