Sorry for the late reply.
Your computation is of the form f1 + g, f2 + g, f3 + g, where g is the projection and then f1, f2, f3 are the variants you do on top of it.
There are three broad ways in which you can use evaluation callback.
1. Given the value and jacobian of g if you are willing to compute the jacobian of f1 + g, f2 + g, f3 +g analytically, then you can use the evaluation callback + autodiff to compute g and read it into the cost function at evaluation time and do the composition with f1, f2, f3 as needed. This is the simplest approach and will work well as long as f1, f2, f3 are simple, which I suspect they are.
2. If you want to compute the composition of f1, f2, f3 also using autodiff, then you will have to do something a bit more complicated where the reading of the already computed g is wrapped inside a CostFunctionToFunctor object and then you evaluate the composition.
3. The third approach is to do this entire computation of the three variants in the evaluation callback using autodiff, store the residuals and jacobians in some datastructure and then read it in. This should be pretty much the same as the current evaluation callback example.
HTH,
Sameer