In this plunk I have directive dir1 calling a method in directive dir2 as described here. 
The problem is that the control object (scope.dir2Ctl) is empty in dir1 and I get TypeError: scope.dir2Ctl.call2 is not a function. Any ideas how to fix this?
HTML
  <body ng-app="myModule" ng-controller="ctl">
    <dir1 x1="1"></dir1>
  </body>
Javascript
angular.module("myModule", [])
.controller('ctl', function($scope) {})
.directive('dir1', function ($timeout) {
    return {
        restrict: 'EA',          
        scope: {
            x1: '='         
        },
        template: '<p>x2 should be 2 = {{x2}} </p>' + 
             '<dir2 control="dir2Ctl"></dir2>',
        link: function (scope, element, attrs) { 
              scope.dir2Ctl = {};
              $timeout(function(){
                  console.log(scope.dir2Ctl)
                  scope.x2 = scope.dir2Ctl.call2();
              },1000);
        }
    }
})
.directive('dir2', function () {
    return {
        restrict: 'EA',          
        scope: {
            control: '='         
        },
        template: '<p>some text in dir2</p>',
        link: function (scope, element, attrs) { 
              scope.control = scope.control || {};
              scope.control.call2 = function(){
                 return 2;
              };
        }
    }
});
 
    