I know that a $scope from a controller can be shared to a link function in directives.
For example, in this code I can call a
1) Yes they both share the same scope, because you are using the controller of the directive to log the scope, which means you can put the 'MyController' inside of the directive like so
return {
replace: true,
controller: function($scope,...){ // equals MyController
}
}
If the controller is a wrapper of the directive instead of inside it and the directive scope is set to true or an object hash, then they wont share the same scope.
2) No consequences, just DO NOT manipulate DOM in the controller, one of uses of the controller is to connect the directives together to get or set data from perhaps a service or by a simple augmentation of the scope (ie: scope.message = "Hello World") either way they need to be minimal. The way you have it setup is ideal if you want to share data amongst other directives you can simply require this directive's controller.
3) Yes avoid DOM manipulation in the controller, its not meant for presentation logic or what the user sees, that is the role of the directives, remember SOC(separation of concerns) each part of the MVC/MV* pattern has its own roll to play.
Think of it in a simple way like this user sees button on presentation layer, user clicks button a function for the click of the button occurs on the business layer (controller) that takes the results and stores in the data/model layer.
Caveat if the button does anything other than process a command (calculations,evaluations,etc) between user and data layer, such as adding classes (DOM manipulation) that function belongs inside a directive.
A great read and more in depth here