It might make sense to use OpenPnP as the front end, I think that it can be set up to use LinuxCNC purely as a motion planner.
Alternatively:
You can probably use T to pick a feeder. But what about if you want to do real toolchanges of the picker nozzle?
Maybe the way to so that is to have a tool table that contains the X and Y of the feeder and use Z (or pocket?) to pick the nozzle.
Or use T1003 to switch to nozzle 3?
As you have noted, there is a lot to decide. It needs to be mapped-out between the input file (Centroid?) and the final canonical movement commands.
I don't see anything in a Centroid file that chooses nozzles, so I think that must be part of machine setup, where each feeder is associated with a nozzle somehow. Which does feel a bit tool-table-like.
The practical solution is probably a Python front-end that interprets the Centroid file, and a purpose-designed setup file for that which decides which feeder has which part, what orientation they are in the tape, and which nozzle should be used. That can then queue-up a set of simple subroutines for the various tasks.
Better would be a dedicated pluggable interpreter and a new Task module.
I suspect that the "Front end" that I suggested above can easily be OpenPnP, which would save a lot of work, I suspect.