Would something like this work equally well?
return {
scope: true,
link: function ( scope, element, attrs ) {
var controller = $controller(attrs.ngController, scope);
element.children().data('$ngControllerController', controller);
}
};
There are questions all the time from people trying to inject $element into controllers; being able to say "if it's not a directive, then you can't" would be helpful but also it would prevent a lot of the questions that come up because someone already injected it. Lastly, there's a lot of confusion in general on the difference between a "directive controller" and a "normal controller" and this would help solidify it.
Josh