A possibility mentioned last year at the time of the Macquarie fix:
here's a more general fix for zic.c. For clarity, it comes in two pieces.
This first piece simply rolls back the Macquarie-specific changes to zic.c;
it's both attached and appears in mangled form below. These changes are
relative to the git repository version.

    @dashdashado

1.1
2838 lines
1.2
2805 lines
*** /tmp/,azic.c    2014-05-01 01:51:26.531315400 -0400
--- /tmp/,bzic.c    2014-05-01 01:51:26.640515600 -0400
***************
*** 1480,1490 ****
          fromi = 0;
          while (fromi < timecnt && attypes[fromi].at < min_time)
              ++fromi;
!         /*
!         ** Remember that type 0 is reserved.
!         */
!         if (isdsts[1] == 0)
!             while (fromi < timecnt && attypes[fromi].type == 1)
                  ++fromi;    /* handled by default rule */
          for ( ; fromi < timecnt; ++fromi) {
              if (toi != 0 && ((attypes[fromi].at +
--- 1480,1487 ----
          fromi = 0;
          while (fromi < timecnt && attypes[fromi].at < min_time)
              ++fromi;
!         if (isdsts[0] == 0)
!             while (fromi < timecnt && attypes[fromi].type == 0)
                  ++fromi;    /* handled by default rule */
          for ( ; fromi < timecnt; ++fromi) {
              if (toi != 0 && ((attypes[fromi].at +
***************
*** 1589,1599 ****
          }
          thistimelim = thistimei + thistimecnt;
          thisleaplim = thisleapi + thisleapcnt;
!         /*
!         ** Remember that type 0 is reserved.
!         */
!         writetype[0] = FALSE;
!         for (i = 1; i < typecnt; ++i)
              writetype[i] = thistimecnt == timecnt;
          if (thistimecnt == 0) {
              /*
--- 1586,1592 ----
          }
          thistimelim = thistimei + thistimecnt;
          thisleaplim = thisleapi + thisleapcnt;
!         for (i = 0; i < typecnt; ++i)
              writetype[i] = thistimecnt == timecnt;
          if (thistimecnt == 0) {
              /*
***************
*** 1609,1619 ****
              /*
              ** For America/Godthab and Antarctica/Palmer
              */
-             /*
-             ** Remember that type 0 is reserved.
-             */
              if (thistimei == 0)
!                 writetype[1] = TRUE;
          }
  #ifndef LEAVE_SOME_PRE_2011_SYSTEMS_IN_THE_LURCH
          /*
--- 1602,1609 ----
              /*
              ** For America/Godthab and Antarctica/Palmer
              */
              if (thistimei == 0)
!                 writetype[0] = TRUE;
          }
  #ifndef LEAVE_SOME_PRE_2011_SYSTEMS_IN_THE_LURCH
          /*
***************
*** 1663,1688 ****
          }
  #endif /* !defined LEAVE_SOME_PRE_2011_SYSTEMS_IN_THE_LURCH */
          thistypecnt = 0;
-         /*
-         ** Potentially, set type 0 to that of lowest-valued time.
-         */
-         if (thistimei > 0) {
-             for (i = 1; i < typecnt; ++i)
-                 if (writetype[i] && !isdsts[i])
-                     break;
-             if (i != types[thistimei - 1]) {
-                 i = types[thistimei - 1];
-                 gmtoffs[0] = gmtoffs[i];
-                 isdsts[0] = isdsts[i];
-                 ttisstds[0] = ttisstds[i];
-                 ttisgmts[0] = ttisgmts[i];
-                 abbrinds[0] = abbrinds[i];
-                 writetype[0] = TRUE;
-                 writetype[i] = FALSE;
-             }
-         }
          for (i = 0; i < typecnt; ++i)
!             typemap[i] = writetype[i] ?  thistypecnt++ : 0;
          for (i = 0; i < sizeof indmap / sizeof indmap[0]; ++i)
              indmap[i] = -1;
          thischarcnt = 0;
--- 1653,1660 ----
          }
  #endif /* !defined LEAVE_SOME_PRE_2011_SYSTEMS_IN_THE_LURCH */
          thistypecnt = 0;
          for (i = 0; i < typecnt; ++i)
!             typemap[i] = writetype[i] ?  thistypecnt++ : -1;
          for (i = 0; i < sizeof indmap / sizeof indmap[0]; ++i)
              indmap[i] = -1;
          thischarcnt = 0;
***************
*** 2105,2115 ****
          updateminmax(leapminyear);
          updateminmax(leapmaxyear + (leapmaxyear < ZIC_MAX));
      }
-     /*
-     ** Reserve type 0.
-     */
-     gmtoffs[0] = isdsts[0] = ttisstds[0] = ttisgmts[0] = abbrinds[0] = -1;
-     typecnt = 1;
      for (i = 0; i < zonecount; ++i) {
          zp = &zpfirst[i];
          if (i < zonecount - 1)
--- 2077,2082 ----