I just did a test with SPServices where I set a Single line of text column to an empty string (""), which seemed to work just fine. This was with WSS 3.0 (the simplest test case, IMO).
$().SPServices({
operation: "UpdateListItems",
async: false,
debug:true,
listName: "Sales Opportunities",
ID: 5,
valuepairs: [["StateID", ""]],
completefunc: function (xData, Status) {
alert(xData.responseText);
}
});
This generates the call:
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<UpdateListItems xmlns="http://schemas.microsoft.com/sharepoint/soap/">
<listName>Sales Opportunities</listName>
<updates>
<Batch OnError="Continue">
<Method ID="1" Cmd="Update">
<Field Name="StateID"></Field>
<Field Name="ID">5</Field>
</Method>
</Batch>
</updates>
</UpdateListItems>
</soap:Body>
</soap:Envelope>
EDIT:
I just did the same thing for a Lookup column and a Person or Group column. The valuepairs line is:
valuepairs: [["State", ""], ["Sales_x0020_Rep", ""]],
Both columns were "emptied".