Sorry for talking to myself so much. Well for now I’ve gone with setting up four Decks, I had hoped I would be able to simplify it but as I’ve managed to simplify the call method I guess it’s not overly needed. I did ask on Zulip whether this would be possible and I guess it was partially from B assuming I really wanted to put it in the xml rather than the javascript code. Anyway I’ve only added the first two for all four decks so far but as you can see from this code they can all have exactly the same Key and no Group set and still work, which is going to make it a lot quicker to generate the xml file. This might be a trick of interest to others so putting it here. 
script:
[code]/*
- Script file for Novation Twitch by Kazakore for Mixxx 2.1
-
*/
var KazasTwitch = function() {};
KazasTwitch.init = function (id, debugging) {
midi.sendShortMsg(0xb7,0x00,0x00); // init Basic Mode
// midi.sendShortMsg(0xb7,0x00,0x01); // Read current controler staus (should’t be needed as done during init 0 above)
KazasTwitch.deckA = new KazasTwitch.Deck ([1], 7);
KazasTwitch.deckB = new KazasTwitch.Deck ([2], 8);
KazasTwitch.deckC = new KazasTwitch.Deck ([3], 9);
KazasTwitch.deckD = new KazasTwitch.Deck ([4], 10);
};
KazasTwitch.shutdown = function() {
midi.sendShortMsg(0xb7,0x00,0x00); // init Basic Mode
midi.sendShortMsg(0xb7,0x00,0x70); // turn off all LEDs on exit
};
KazasTwitch.Deck = function(deckNumbers, channel) {
components.Deck.call(this, deckNumbers);
this.playButton = new components.PlayButton([0x90 + channel, 0x17]);
this.hotcueButtons = [];
for (var i = 1; i <= 8; i++) {
this.hotcueButtons[i] = new components.HotcueButton({
midi: [0x90 + channel, 0x5f + i],
group: "[Channel" + (channel-6) + "]",
number: i,
});
}
this.reconnectComponents(function(c) {
if (c.group === undefined) {
c.group = this.currentDeck;
}
});
};
KazasTwitch.cues = function(channel, control, value, status, group) {
var cueNo = (control - 0x5f) ;
var deckNo
if (channel == 7) {group = “[Channel1]” , deckNo = “deckA” ;
}
else if (channel == 8) {group = “[Channel2]” , deckNo = “deckB” ;
}
else if (channel == 9) {group = “[Channel3]” , deckNo = “deckC” ;
}
else {group = “[Channel4]” , deckNo = “deckD” ;
}
KazasTwitch[deckNo].hotcueButtons[cueNo].input(channel, control, value, status, group);
};
KazasTwitch.Deck.prototype = new components.Deck();[/code]
xml
<?xml version='1.0' encoding='utf-8'?>
<MixxxControllerPreset mixxxVersion="2.1.x" schemaVersion="1">
<info>
<name>Kazas Twitch</name>
<author>Kazakore <dj_kaza@hotmail.com></author>
<description>Revised mapping for Novation Twitch (in basic mode)</description>
<wiki></wiki>
<forum></forum>
</info>
<controller id="kazas_twitch">
<scriptfiles>
<file filename="lodash.mixxx.js"/>
<file filename="midi-components-0.0.js"/>
<file functionprefix="KazasTwitch" filename="kazas_twitch-scripts.js"/>
</scriptfiles>
<controls>
<control>
<group></group>
<key>KazasTwitch.cues</key>
<status>0x97</status>
<midino>0x60</midino>
<options>
<script-binding/>
</options>
</control>
<control>
<group></group>
<key>KazasTwitch.cues</key>
<status>0x98</status>
<midino>0x60</midino>
<options>
<script-binding/>
</options>
</control>
<control>
<group></group>
<key>KazasTwitch.cues</key>
<status>0x99</status>
<midino>0x60</midino>
<options>
<script-binding/>
</options>
</control>
<control>
<group></group>
<key>KazasTwitch.cues</key>
<status>0x9a</status>
<midino>0x60</midino>
<options>
<script-binding/>
</options>
</control>
<control>
<group></group>
<key>KazasTwitch.cues</key>
<status>0x97</status>
<midino>0x61</midino>
<options>
<script-binding/>
</options>
</control>
<control>
<group></group>
<key>KazasTwitch.cues</key>
<status>0x98</status>
<midino>0x61</midino>
<options>
<script-binding/>
</options>
</control>
<control>
<group></group>
<key>KazasTwitch.cues</key>
<status>0x99</status>
<midino>0x61</midino>
<options>
<script-binding/>
</options>
</control>
<control>
<group></group>
<key>KazasTwitch.cues</key>
<status>0x9a</status>
<midino>0x61</midino>
<options>
<script-binding/>
</options>
</control>
<control>
<group></group>
<status>0x97</status>
<midino>0x17</midino>
<key>KazasTwitch.deckA.playButton.input</key>
<options>
<script-binding/>
</options>
</control>
<control>
<group>[Channel3]</group>
<status>0x99</status>
<midino>0x17</midino>
<key>KazasTwitch.deckC.playButton.input</key>
<options>
<script-binding/>
</options>
</control></controls>
<outputs>
</outputs>
</controller>
</MixxxControllerPreset>