I didn't quite understand what they meant with the Bank A/B at first.

I've now tried with both versions, and still no blinky.

Code:
#CONFIG
    __config _CONFIG1, _FEXTOSC_OFF & _RSTOSC_HFINT32 & _CLKOUTEN_OFF & _CSWEN_OFF & _FCMEN_ON
    __config _CONFIG2, _MCLRE_ON & _PWRTE_OFF & _LPBOREN_OFF & _BOREN_ON & _BORV_LO & _ZCD_OFF & _PPS1WAY_OFF & _STVREN_ON & _DEBUG_OFF
    __config _CONFIG3, _WDTCPS_WDTCPS_11 & _WDTE_OFF & _WDTCWS_WDTCWS_7 & _WDTCCS_LFINTOSC
    __config _CONFIG4, _WRT_OFF & _SCANE_available & _LVP_OFF
    __config _CONFIG5, _CP_OFF & _CPD_OFF
#ENDCONFIG

DEFINE OSC 32

define  CCP1_REG     0              ' Must clear unused CCP pins or else unpredictable results
DEFINE  CCP1_BIT     0
define  CCP2_REG     0
DEFINE  CCP2_BIT     0
DEFINE  CCP3_REG    PORTB
DEFINE  CCP3_BIT     5
define  CCP4_REG     0
DEFINE  CCP4_BIT     0
define  CCP5_REG     0
DEFINE  CCP5_BIT     0

ANSELA = %00000000
ANSELB = %00000000
ANSELC = %00000000
ANSELD = %00000000
ANSELE = %00000000

TRISA = %00000000
TRISB = %00000000
TRISC = %00000000
TRISD = %00000000
TRISE = %00001000

PinSCL2     VAR PortB.1
PinSDA2     VAR PortB.2

    HPWM 3, 8, 1953

addr        var byte : addr      = %01000000        ' $40

IOCONreg    var byte : IOCONreg  = $05
IOCONdat    var byte : IOCONdat  = %00110000      ' Bank=0
'IOCONdat    var byte : IOCONdat  = %10110000      ' Bank=1
'   bit 7   1 = The registers associated with each port are separated into different banks.
'   bit 6   0 = The INT pins are not connected. INTA is associated with PORTA and INTB is associated with PORTB
'   bit 5   1 = Sequential operation disabled, address pointer does not increment.
'   bit 4   1 = Slew rate disabled
'   bit 3   0 = Disables the MCP23S17 address pins.
'   bit 2   0 = Active driver output (INTPOL bit sets the polarity.)
'   bit 1   0 = Active-low
'   bit 0   Unimplemented: Read as ‘0’

    I2CWRITE PinSDA2,PinSCL2,addr,IOCONreg,[IOCONdat] : pauseus 1

IODIRAreg   var byte : IODIRAreg = $00      ' Bank=0 
'IODIRAreg   var byte : IODIRAreg = $00      ' Bank=1  
IODIRAdat   var byte : IODIRAdat = %00000000

    I2CWRITE PinSDA2,PinSCL2,addr,IODIRAreg,[IODIRAdat] : pauseus 1 'set GPIOA all output

IODIRBreg   var byte : IODIRBreg = $01      ' Bank=0 
'IODIRBreg   var byte : IODIRBreg = $10      ' Bank=1 
IODIRBdat   var byte : IODIRBdat = %00000000

    I2CWRITE PinSDA2,PinSCL2,addr,IODIRBreg,[IODIRBdat] : pauseus 1 'set GPIOB all output

OLATAreg    var byte : OLATAdat    var byte
OLATBreg    var byte : OLATBdat    var byte

LOOOP:
    OLATAreg    = $14 : OLATAdat    = %00000000      ' Bank=0
'    OLATAreg    = $0A : OLATAdat    = %00000000      ' Bank=1
    I2CWRITE PinSDA2,PinSCL2,addr,OLATAreg,[OLATAdat] : pauseus 1

    OLATBreg    = $15 : OLATBdat    = %00000000      ' Bank=0
'    OLATBreg    = $1A : OLATBdat    = %00000000      ' Bank=1
    I2CWRITE PinSDA2,PinSCL2,addr,OLATBreg,[OLATBdat] : pauseus 1

    pause 250

    OLATAreg    = $14 : OLATAdat    = %11111111      ' Bank=0
'    OLATAreg    = $0A : OLATAdat    = %11111111      ' Bank=1
    I2CWRITE PinSDA2,PinSCL2,addr,OLATAreg,[OLATAdat] : pauseus 1

    OLATBreg    = $15 : OLATBdat    = %11111111      ' Bank=0
'    OLATBreg    = $1A : OLATBdat    = %11111111      ' Bank=1
    I2CWRITE PinSDA2,PinSCL2,addr,OLATBreg,[OLATBdat] : pauseus 1

    pause 250

    GOTO LOOOP
end