The following patch includes the changes I made to the Xorg XKB files adds a keyboard model for the MS Digital Media Keyboard that maps some of the multimedia keys:

diff -p -up xkb/rules/base.xml.orig xkb/rules/base.xml
--- xkb/rules/base.xml.orig	2008-05-01 05:12:36.000000000 +0930
+++ xkb/rules/base.xml	2008-11-26 21:06:35.000000000 +1030
@@ -751,6 +751,13 @@
     </model>
     <model>
       <configItem>
+        <name>microsoftdmedia</name>
+        <description>Microsoft Digital Media Keyboard</description>
+        <vendor>Microsoft Inc.</vendor>
+      </configItem>
+    </model>
+    <model>
+      <configItem>
         <name>oretec</name>
         <description>Ortek MCK-800 MM/Internet keyboard</description>
         <vendor>Ortek</vendor>
diff -p -up xkb/rules/base.lst.orig xkb/rules/base.lst
--- xkb/rules/base.lst.orig	2008-05-01 05:12:36.000000000 +0930
+++ xkb/rules/base.lst	2008-11-26 21:06:35.000000000 +1030
@@ -106,6 +106,7 @@
   microsoftoffice Microsoft Office Keyboard
   microsoftmult   Microsoft Wireless Multimedia Keyboard 1.0A
   microsoftelite  Microsoft Natural Keyboard Elite
+  microsoftdmedia Microsoft Digital Media Keyboard
   oretec          Ortek MCK-800 MM/Internet keyboard
   propeller       Propeller Voyager (KTEZ-1000)
   qtronix         QTronix Scorpius 98N+
diff -p -up xkb/rules/base.orig xkb/rules/base
--- xkb/rules/base.orig	2008-05-01 05:12:36.000000000 +0930
+++ xkb/rules/base	2008-11-26 21:06:34.000000000 +1030
@@ -60,6 +60,7 @@
 	      logidinovo logidinovoedge
               microsoftinet microsoftpro microsoftprousb microsoftprooem microsoftprose
               microsoftoffice microsoftmult
+              microsoftdmedia
               mx1998 mx2500 mx2750
               oretec
               presario propeller
diff -p -up xkb/symbols/inet.orig xkb/symbols/inet
--- xkb/symbols/inet.orig	2008-05-01 05:12:36.000000000 +0930
+++ xkb/symbols/inet	2008-12-14 01:11:46.000000000 +1030
@@ -1768,6 +1768,41 @@ xkb_symbols "microsoftmult" {
 //   My Computer Section — Left Side
 };

+// Microsoft Digital Media Keyboard 1.0A
+partial alphanumeric_keys
+xkb_symbols "microsoftdmedia" {
+    include "inet(media_common)"
+    // No keycode: Increase Zoom
+    // No keycode: Decrease Zoom
+    key <I20>	{	[ XF86AudioMute		]	};
+    key <I2E>	{	[ XF86AudioLowerVolume	]	};
+    key <I30>	{	[ XF86AudioRaiseVolume	]	};
+    key <I66>	{	[ XF86Favorites		]	};
+    // No keycode: Favorite1
+    // No keycode: Favorite2
+    // No keycode: Favorite3
+    // No keycode: Favorite4
+    // No keycode: Favorite5
+    key <I6C>	{	[ XF86Mail		]	};
+    key <I32>	{	[ XF86HomePage		]	};
+    // No keycode: Messenger
+    key <I21>	{	[ XF86Calculator	]	};
+    // No keycode: Log Off
+    // Skipped: Sleep
+    key <I75>	{	[ Help			]	};
+    key <I07>	{	[ Undo			]	};
+    key <I0A>	{	[ Redo			]	};
+    key <I09>	{	[ XF86New		]	};
+    key <I3F>	{	[ XF86Open		]	};
+    key <I2F>	{	[ XF86Close		]	};
+    key <I64>	{	[ XF86Reply		]	};
+    key <I0E>	{	[ XF86MailForward	]	};
+    key <I5A>	{	[ XF86Send		]	};
+    // No keycode: Spell
+    key <I55>	{	[ XF86Save		]	};
+    key <I39>	{	[ Print			]	};
+};
+
 // Oretec

 // Oretec MCK-800 MM/Internet keyboard
diff -p -up xkb/symbols.dir.orig xkb/symbols.dir
+-- xkb/symbols.dir.orig	2008-05-01 05:12:36.000000000 +0930
+++ xkb/symbols.dir	2008-11-26 21:05:46.000000000 +1030
@@ -622,6 +622,7 @@ h-p----- a------- inet(logitech_set3)
 --p----- a------- inet(microsoftprose)
 --p----- a------- inet(microsoftoffice)
 --p----- a------- inet(microsoftmult)
+--p----- a------- inet(microsoftdmedia)
 --p----- a------- inet(oretec)
 --p----- a------- inet(propeller)
 --p----- a------- inet(qtronix)

Use xev to discover and document the keycodes that unmapped keys produce. Keycodes greater than 128 translate to the I hex codes in xkb/symbols/inet by subtracting 128.