Well, in the end I found that simply removing the rules and putting them back in place on the onchange event worked. There is code duplication, which isn't ideal, but at least it works.
//function to retrieve attribute
typeConfig.get = function (attr) {
var n = $(':input#type').val();
return typeConfig[n][attr];
};
//validation
$("#magic").validate({
rules: {
rows: {
required: true,
digits: true,
range: [typeConfig.get('RowLow'), typeConfig.get('RowHigh')]
},
stitches: {
required: true,
digits: true,
range: [typeConfig.get('StsLow'), typeConfig.get('StsHigh')]
}
}
});
//Type settings
$(':input#type').change(function () {
$("#rows").rules("remove");
$("#stitches").rules("remove");
$("#rows").rules("add", {
required: true,
digits: true,
range: [typeConfig.get('RowLow'), typeConfig.get('RowHigh')]
});
$("#stitches").rules("add", {
required: true,
digits: true,
range: [typeConfig.get('StsLow'), typeConfig.get('StsHigh')]
});
});