It depends on your implementation details. In general you should see a plugin really as a plugin. So your application can use it if available. So concept code for example:
if(pluginAvailable('PagesPlugin')) {
$this->set('menu', $this->PagesPluginComponent->getMenuItems());
}
You application can depend on it but it can also not be here. That's the generic concept of a plugin. In real world it's much harder because you cannot show your webpage without the menu so that creates a real dependency.
A plugin should be re-usable.
Some options:
Fully plugin based page structure
You create a plugin which has the table pages in itself. The plugin has a component which loads the menu items and a helper which supports showing them.
So in your appcontroller load the component, here you set the dependency. And in before_filer you load the menu data and send it to the view.
In your default.ctp (or other layout file) you call the plugin helper with the data.
Do a requestAction
Create a method in your plugin controller and call requestAction: http://book.cakephp.org/2.0/en/controllers.html#Controller::requestAction
So you can call: yourplugin/menus/index and it returns a full MVC process. So your controller in the plugin gets the menu items from the model, sends the data to it's view and in index.ctp you render the menu. You get back the HTML result in your application, totally complete.
Create a plugin with just a helper
If you want the data in your model a plugin cannot help much but still: If you have a complex function which generates a well-styled menu you can put it in a plugin helper.
In your application you do the loading by yourself in your application, so you have all flexibility there. You send it to the view but you use the plugin to render your menu. That way you can re-use your menu helper also without issues.
Let appController extend your plugin appController
Don't like it but it is possible: You can create a new AppController in your plugin which handles setting up menu and all other things. You application appController then can extend that version instead of the normal AppController extends Controller. So you get: AppController extends yourPluginAppController. I don't like this pattern in general though because the calls and dependencies are not visible anymore but really automatically added and executed.
Optionally: For a more flexible way of working CakePHP has added the new: Events http://book.cakephp.org/2.0/en/core-libraries/events.html which is quite interesting. You could place interesting events in for example your appcontroller and attach listeners in the plugins for it. That would save you from hardcode calling those methods. So that might work out but it is quite new and there are some glitches because it's brand new. Documentation is not yet complete and proven use of it has not been released much.