I asked Marklin support this question specifically a few months ago when I got the new 21671 track cleaner and wanted to make some adjustments to the function mapping. Their answer is what I translated from German on how to function map the MSD3 decoder in DCC:
Our decoder can have and save up to 80 function assignments. In order to change a function assignment, the current function mapping must first be read out and possibly be noted. In this way you can find out in which of the up to 80 mapping lines which function assignment is entered. If you have found the right one, changes can be made accordingly, e.g. two function keys can be swapped. For this action you of course need the CV list from our homepage.
With CVs 33 .. 37 the CVs can be read, changed and written. Which values can be written into the CVs can be found in the CV list.
CV 33 - read out a function assignment from 0 .. 79
CV 34 - read and write function trigger of the assignment read with CV 33
CV 35 - read and write function condition of the assignment read with CV 33
CV 36 - Read and write the function event of the assignment read with CV 33
CV 37 - Usually write back the function assignment from 0 .. 79 read with CV 33
In the delivery state of the L21671, the function assignments F4 and F11 mentioned here are in the following entries:
.. F4: Entry 45 ie CV33 | 37 = 45 read | write / CV34 = 4 (F key 4) / CV35 = 0 (normal standard) / CV36 = 87 (sound 4)
.. F11: Entry 12 ie CV33 | 37 = 12 read | write / CV34 = 11 (F button 11) / CV35 = 24 (for forward and driving) / CV36 = 87 (output 6)
Assuming the delivery status ..
.. read out the assignment 45 with CV 33 = 45
.. with CV 34 = 11 to swap the F key 4 for the F key 11
.. with CV 37 = 45 the Z Write order 45 back
.. with CV 33 = 12 read out the assignment 12
.. with CV 34 = 4 swap the F key 11 for the F key 4
.. with CV 37 = 12 write back the assignment 12
And that's it both functions F4 and F11 swapped.