Okay, the trouble is that json.js extends Object itself (a common cause of conflicts between AJAX libraries), so everything gets the .toJSONString() method attached. This is a problem when the Microsoft AJAX Library tries to register its enumerations. Type.registerEnum() tries to verify that the only values inside the enum are numbers, but the one called 'toJSONString' is a function, so it throws.
One solution is to include json.js after including MicrosoftAjax.js. The best way to do that would be to register the script with the ScriptManager, like:
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Scripts>
<asp:ScriptReference Path="json.js" />
</Scripts>
</asp:ScriptManager>
This is probably not an option for you, because json.js is getting included by another control that you can't change.
Another option is to edit json.js (probably not possible if it's embedded in the control you're using?) or undo the change json.js makes to Object, like this:
<script type="text/javascript" src="json.js"></script>
<script type="text/javascript">
delete Object.prototype.toJSONString;
</script>
This assumes that the extension of the actual Object prototype isn't needed. (It already also extends Array, Boolean, Date, Number, and String. Maybe that's sufficient for what it's being used for.)
The last idea I have would be to modify MicrosoftAjax.js itself. You can do that by copying down the Microsoft AJAX Library from ajax.asp.net, and then pointing the ScriptManager to your version via the ScriptPath attribute. Then you can modify the scripts as you like. Specifically, you'd have to at least comment out lines 2421 and 2422 of MicrosoftAjax.debug.js (and/or the corresponding lines of MicrosoftAjax.js).
Note that this doesn't seem to be an issue when debug="false", so maybe you can get by without having to do one of these changes.
I hope that helps, and sorry I don't have a better answer for you.
Steve Marx | ASP.NET AJAX Evangelist | Microsoft Corporation