Well, for A620, I started with Coffin's matrix (just converted to xyY, so that data were meaningful for me), first corrected Y values for R and B to achieve correct WB, then moved position of primaries around (changed x or/and y; Y should be also corrected every time), until I got closest match on macbeth target, shoot with A620, to the result from 400D. Additionally, I corrected matrix on some real life photos, because ACR matrix for 400D isn't very good in red range - red color has too high hue, so everything is too orange (even on my CRT monitor, where pure red looks less orange than on LCD monitors) . I was checking photos in RGB and HSV, wasn't using Lab.
There's a part of code in DngSetMatrix with variable Normalized, but it's not normalization, it just keeps dividing all values with 10 until every value is <= 3, so that displayed values fit into output format with 4 decimal places
repeat
normalized := True;
for i := 1 to 9 do
if Matrix1 > 3 then normalized := False;
if normalized then Break;
for i := 1 to 9 do
Matrix1 := Matrix1 / 10;
until False;
Before writing to dng, every value is multiplied with 10000, so all (integer) values are in range -nnnn .. 30000. I suppose there is more elegant way to achieve this, but it works