Well, I don't know what's going on with the replies above, but in response to the original question, this might work:
Code:
<body>
<script type="text/javascript">
function doCount(elem, count, limit, names)
{
names = names.split("+");
var pForm = elem.form,
total = 0,
val = elem.value,
ln = names.length,
i = -1;
while(++i < ln)
total += pForm[names[i]].value.length;
total > limit ? elem.value = val.substr(0, val.length - 1) : count.value = limit - total;
}
</script>
<form>
<fieldset style="text-align:center;padding-bottom:1em">
<legend>
<label>characters remaining: </label>
<input name="counter" value="20" size="4" readonly>
</legend>
<textarea name="txt1" cols="20" rows="2"
onkeydown="doCount(this, counter, 20, 'txt1+txt2+txt3')" onkeyup="doCount(this, counter, 20, 'txt1+txt2+txt3')"></textarea>
<textarea name="txt2" cols="20" rows="2"
onkeydown="doCount(this, counter, 20, 'txt1+txt2+txt3')" onkeyup="doCount(this, counter, 20, 'txt1+txt2+txt3')"></textarea>
<textarea name="txt3" cols="20" rows="2"
onkeydown="doCount(this, counter, 20, 'txt1+txt2+txt3')" onkeyup="doCount(this, counter, 20, 'txt1+txt2+txt3')"></textarea>
</fieldset>
</form>
</body>
Edit:
I hadn't tested that in Opera: a browser that requires an additional onkeypress handler...
it also added my linebreaks to the textarea values (those have been removed). 
I suppose all of the parameters should be put into the function as variables, given the number of event handlers that they'd be stuffed into.