Cheers @Patch_ed !
There’s actually an easier way to Duplicate built-in commands, which are already pre-conditioned and then apply a custom “(SHIFT)” action to them.
The way the Custom “(SHIFT)” works in djay’s XML is the presence of these two lines to a command’s “dict” section
<key>modifier</key>
<true/>
at they go to the very end of a section.
To illustrate, here is a stock dict block that controls FX Wet/Dry for Deck1 on a knob:
<dict>
<key>condition</key>
<string>modifier5 == 0</string>
<key>keyPath</key>
<string>turntable1.fx1WetDryValue</string>
<key>midiChannel</key>
<integer>8</integer>
<key>midiData</key>
<integer>0</integer>
<key>midiMessageType</key>
<integer>3</integer>
</dict>
And below is the (SHIFT) action for the same knob (8/0/3), that controls the FX1 Parameter:
<dict>
<key>condition</key>
<string>modifier5 == 0</string>
<key>keyPath</key>
<string>turntable1.fx1ParameterValue</string>
<key>midiChannel</key>
<integer>8</integer>
<key>midiData</key>
<integer>0</integer>
<key>midiMessageType</key>
<integer>3</integer>
<key>modifier</key>
<true/>
</dict>
Both have the “modifier5 == 0” condition filter, which takes care that it only works when Deck1 is selected, and not for Deck3. The same 8/0/3 message doing different things with and w/o (SHIFT).
So practically, to make the same knob under a “condition”, capable of controlling a second action for the same deck or a PadMode through a Custom Shift (e.g. your SF button), you cannot just MIDI learn with (SHIFT) + control from the UI, as it will start with the empty entry w/o “condition” filter. It won’t respect the Deck1/3 or the PadMode selection. Instead, all you need to do is to “Duplicate” in the XML directly by copy & pasting text from the dict to the /dict tags, and add the “modifier /true” thing at the end, right before the closing “/dict”. This way, you preseve the original condition string and have a (SHIFT) action like you can do through the UI, but this time it inherits the filters filters.
I somewhat think that it is easier to just duplicate the command in the XML and add a simple:
<key>modifier</key>
<true/>
which is always the same, and makes it a (SHIFT) action, instead of “reinventing” condition strings for a duplication done through the UI, and without the proper condition. This is somewhat easier and more straight forward and you don’t need to bother tracking the selected deck or pad mode condition filtering (which you can’t from the UI yet), as it’s already inherited in the cloned entry from the start.
The approach is fully appliable if you want to add a Custom (SHIFT) action to the PadModes. If you go through the UI and create a set of (SHIFT) actions by MIDI learn, they wont have a PadMode filter, and out-of the-box you will have just one set of (SHIFT) mapping for all the pads across all PadModes. What a waste, eh? Instead of getting a full 8x8=64 more buttons on the FLX4 to set a (SHIFT) action to, you only get 8, which are global regardless of the selected PadModes. Blah, I wouldn’t be happy. All is more 
Instead, just go to the XML & locate the PadMode definition in the XML for a certain PadMode. The names of the commands mean a lot, and you can easily navigate. Once you identify the PadMode records, just copy & paste all the 8 dict sections for all 8 buttons of the PadMode at once; append a modifier /true set of tags at the end of each of the dict blocks in the pasted set, and you’re done. And in my opinion, that’s a fairly quick thing to do. Then go back to the UI, and you have a set of 8 properly filtered (SHIFT) entries for each of the 8 pads in the pad mode which are assignable to do different things. And you can repeat this for every PadModes, which would give you a total of 64 extra (SHIFT) controls - one for each of the PadModes.
HTH,
Kal (and I’m a dude, BTW
)