Well it's no wonder you can't get 503 to work, the code is broken.
In P_SpawnScrollers(), p.spec.c, starting in line 6253:
if (special == 515 || special == 512 || special == 522 || special == 532 || special == 504) // displacement scrollers
{
special -= 2;
control = (int)(sides[*l->sidenum].sector - sectors);
}
else if (special == 514 || special == 511 || special == 521 || special == 531 || special == 504) // accelerative scrollers
{
special--;
accel = 1;
control = (int)(sides[*l->sidenum].sector - sectors);
}
Line type 504 is erroneously tested twice. Because the second test is after an else, only the first one is ever reached -- and 503 is not recognized at all.
Basically these linedefs should work exactly the same way as the corresponding floor scrollers do. Move the floor/ceiling height of the control linedef's front sector and the target linedefs should scroll accordingly. Displacement controls speed by velocity, Accelerative controls speed by acceleration.