Blinking two LEDs in and out of phase

No. That would block and be no better than the delay() version

You could use if/else:

void loop()
{
  Serial.println((millis() / 1000) % 60);
  static unsigned long timer = 0;
  unsigned long elapsedTime = millis() - timer;

  if (elapsedTime < 10000ul) // between 0 and 10 sec do:
    blink(50, 0, 2000);
  else if (elapsedTime < 30000ul) // between 10 and 30 sec do:
    blink(50, 100, 3000);
  else if (elapsedTime < 45000ul) // between 30 and 45 sec do:
    blink(50, 500, 1000);
  else if (elapsedTime < 60000ul) // between 45 and 60 sec do:
    blink(50, 100, 2000);
  else
    timer = millis(); // At 60 seconds, restart the timer
}