This behavior does not make sense to me - having WebMethod should not break anything, in fact it is required. ScriptMethod, on the other hand, is optional, and is used mostly to provide options like [ScriptMethod(UseHttpGet=true)]
Can you please give us an example of what your method signature looks like, including all the attributes?