AngularJs 1.x: Remove dynamically created scope and de-register controller

I created a scope and controller dynamically from my code (usually from a provider) as given below

var controllerFn = function ($scope) {
  /* scope functions and variables */
  $scope.$on('custom_ng_event', function (evt) {
    console.log('Custom evt listened in dynamic scope');
  });
  $scope.$on('$destroy', function () {
    console.log('Dynamically created scope destroyed');
  });
}
var $scope = $rootScope.$new();
var ctrlInstance = $controller(controllerFn, {$scope: $scope}); 

I want to remove the scope and de-register the controller at a certain point. I thought that $scope.$destroy() would do the task, but I think I’m missing something as it is not giving the expected result. Like, any broadcast to the $rootScope is still being reflected in the dynamically created scope listener.

Please help me to understand what I have done wrong.

Additional Info:
I preference is to have my dynamically created scope to be a child scope of root scope (directly) because it is meant to be used for the whole application (similar to that of a modal).

Thanks in advance
Balu

Source: AngularJS