rclcpp_lifecycle::LifecycleNode features an additional constructor parameter called enable_communication_interface. (default: true).
However, in Nav2 the parameter is hidden:
ControllerServer::ControllerServer(const rclcpp::NodeOptions & options)
: nav2::LifecycleNode("controller_server", "", options),
should be:
ControllerServer::ControllerServer(const rclcpp::NodeOptions & options, bool enable_communication_interface)
: nav2::LifecycleNode("controller_server", "", options, enable_communication_interface),
... and then, into nav2::LifecycleNode it would need to be properly set into the constructor of the the base class rclcpp_lifecycle::LifecycleNode.
This is in support of ros2/rclcpp#2874 (comment) - of course is an advanced use case for SW integrators with very specific needs, but I think that it is a simple thing to add to Nav2 - basically not to hide a base class "toggle".