For those interested, I did some tests:

It seems like a ng-controller's $scope is always inherited prototypical from its parent $scope. This means that once we have a directive with isolated scope, it breaks the inheritance chain and start a new one. In our case, GaContextMenuController inherits the scope from the gaMap directive as it is defined in the directives `scope: '=gaMapMap' section; it ignores the changes made to `scope` inside the link function.