Yes, a "1" means the corresponding LED is on and "0" means off. If you have the following definition:
#define led0 B0001
#define led1 B0010
#define led2 B0100
#define led3 B1000
Note, the defined name such as "led0" goes before the content such as B0001. When the compiler sees led0, it replaces it with B0001, not the other way around 
You don't have to define more such as led0+led1, the following will do the effect:
(led0|led1)
It's hard to see but I wrote led0 vertical bar led1. The vertical bar does a bit-wise "OR" so that 0001 and 0010 are slapped together, with the "OR" rule. "OR" rule is 1 OR 0 is 1, 1 OR 1 is 1, 0 OR 0 is 0. The result is to collect all the "1's" together.
You learn pretty fast. Already using #define ? I was also hoping that you will get to arrays at some time but you're really pretty fast. So yes I meant to define an array just like the one you mentioned.
So let's do the following for your pins:
int ledPins[] = {
 3,6,9,11 };   // an array of pin numbers to which LEDs are attached
int pinCount = 4;Â Â Â Â Â // the number of pins (i.e. the length of the array)
Then all you need to do is to decode the numbers such as B0011 and turn on or off certain LED. This can be done with yet another bit-wise operator "AND".
if ((LEDs[0]&led0)!=0) digitalWrite(ledPins[0],HIGH);
The above looks at the first element of LEDs array and decide whether to turn on led0, with the pin number stored in ledPins array. So I took the liberty to incorporate your current code with the blinking in sync and here is the complete code (tested):
Notice there are some changes to the code to take advantage of the ledPins array.
/*
 "Jingle Bells" Melody
Plays "Jingle Bells"
circuit:
* 8-ohm speaker on digital pin 7
Â
*/
#include "pitches.h"
#define led0 B0001
#define led1 B0010
#define led2 B0100
#define led3 B1000
int ledPins[] = {
 3,6,9,11 };   // an array of pin numbers to which LEDs are attached
int pinCount = 4;Â Â Â Â Â // the number of pins (i.e. the length of the array)
// notes in the melody:
int melody[] = {
 NOTE_D4, NOTE_B4, NOTE_A4, NOTE_G4, NOTE_D4, NOTE_D4, NOTE_D4,
 NOTE_D4, NOTE_B4, NOTE_A4, NOTE_G4, NOTE_E4,
 NOTE_E4, NOTE_C5, NOTE_B4, NOTE_A4, NOTE_FS4,
 NOTE_D5, NOTE_D5, NOTE_C5, NOTE_A4, NOTE_B4, NOTE_D4,
 NOTE_D4, NOTE_B4, NOTE_A4, NOTE_G4, NOTE_D4, NOTE_D4, NOTE_D4,
 NOTE_D4, NOTE_B4, NOTE_A4, NOTE_G4, NOTE_E4, NOTE_E4,
 NOTE_E4, NOTE_C5, NOTE_B4, NOTE_A4, NOTE_D5, NOTE_D5, NOTE_D5, NOTE_D5,
 NOTE_E5, NOTE_D5, NOTE_C5, NOTE_A4, NOTE_G4,
 NOTE_B4, NOTE_B4, NOTE_B4, NOTE_B4, NOTE_B4, NOTE_B4,
 NOTE_B4, NOTE_D5, NOTE_G4, NOTE_A4, NOTE_B4,
 NOTE_C5, NOTE_C5, NOTE_C5, NOTE_C5, NOTE_C5, NOTE_B4, NOTE_B4, NOTE_B4, NOTE_B4,
 NOTE_B4, NOTE_A4, NOTE_A4, NOTE_B4, NOTE_A4, NOTE_D5,
 NOTE_B4, NOTE_B4, NOTE_B4, NOTE_B4, NOTE_B4, NOTE_B4,
 NOTE_B4, NOTE_D5, NOTE_G4, NOTE_A4, NOTE_B4,
 NOTE_C5, NOTE_C5, NOTE_C5, NOTE_C5, NOTE_C5, NOTE_B4, NOTE_B4, NOTE_B4, NOTE_B4,
 NOTE_D5, NOTE_D5, NOTE_C5, NOTE_A4, NOTE_G4 };
// note durations: 4 = quarter note, 8 = eighth note, etc.:
int noteDurations[] = {
 8, 8, 8, 8, 3, 16, 16,
 8, 8, 8, 8, 2,
 8, 8, 8, 8, 2,
 8, 8, 8, 8, 3, 8,
 8, 8, 8, 8, 3, 16, 16,
 8, 8, 8, 8, 3, 8,
 8, 8, 8, 8, 8, 8, 8, 8,
 8, 8, 8, 8, 2,
 8, 8, 4, 8, 8, 4,
 8, 8, 6, 16, 2,
 8, 8, 6, 16, 8, 8, 8, 16, 16,
 8, 8, 8, 8, 4, 4,
 8, 8, 4, 8, 8, 4, 8, 8, 6, 16, 2,
 8, 8, 6, 16, 8, 8, 8, 16, 16,
 8, 8, 8, 8, 2 };
byte LEDs[]={
 B0010, B0100, B1000, B0001, B1111,   B0001,  B0001,
 B0001, B1000, B0100, B0010, B1111,
 B0010, B1000, B0100, B0001, B1111,
 B0001, B0100, B1000, B0010, B1111,   B0010,
 B0010, B0100, B1000, B0001, B1111,   B0001,  B0001,
 B0001, B1000, B0100, B0010, B1111,   B0010,
 B0010, B0100, B1000, B0001, B1001,  B0110,  B1100,   B0011,
 B1010,  B0101,  B1010,  B0101,  B1111,
 B0110,  B0110,  B0110,  B1001,  B1001,   B1001,
 B0010, B0100, B1000, B0001, B1111,
 B0110,  B0110,  B0110,  B0110,  B0110,   B1001,  B1001,   B1001,   B1001,
 B0010, B0100, B1000, B0001, B0010,  B1111,
 B0110,  B0110,  B0110,  B1001,  B1001,  B1001,
 B0010, B0100, B1000, B0001, B1111,
 B0110,  B0110,  B0110,  B0110,  B0110,  B1001,  B1001,   B1001,   B1001,
 B1111,   B1111,   B1100,  B0011,  B1111};
void setup() {
 for (int i=0;i<pinCount;i++)
 {
  pinMode(ledPins[i],OUTPUT);
  digitalWrite(ledPins[i], LOW);
 }
 // iterate over the notes of the melody:
 for (int thisNote = 0; thisNote < 100; thisNote++) {
  // to calculate the note duration, take one second
  // divided by the note type.
  //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
  int noteDuration = 1800/noteDurations[thisNote];
  // I found that by lengthening the noteDuration,
  // I was able to "slow" the song down.
  tone(7, melody[thisNote],noteDuration);
Â
  LEDon(thisNote);
  // to distinguish the notes, set a minimum time between them.
  // the note's duration + 30% seems to work well:
  delay(noteDuration);
  LEDoff(thisNote);
  int pauseBetweenNotes = noteDuration * 0.30;
  delay(pauseBetweenNotes);
  // stop the tone playing:
  noTone(7);
 }
}
void loop() {
 // no need to repeat the melody.
}
int currentLEDpin=3;
void LEDon(int thisNote)
{
 if ((LEDs[thisNote]&led0)!=0) digitalWrite(ledPins[0],HIGH);
 if ((LEDs[thisNote]&led1)!=0) digitalWrite(ledPins[1],HIGH);
 if ((LEDs[thisNote]&led2)!=0) digitalWrite(ledPins[2],HIGH);
 if ((LEDs[thisNote]&led3)!=0) digitalWrite(ledPins[3],HIGH);
}
void LEDoff(int thisNote)
{
 if ((LEDs[thisNote]&led0)!=0) digitalWrite(ledPins[0],LOW);
 if ((LEDs[thisNote]&led1)!=0) digitalWrite(ledPins[1],LOW);
 if ((LEDs[thisNote]&led2)!=0) digitalWrite(ledPins[2],LOW);
 if ((LEDs[thisNote]&led3)!=0) digitalWrite(ledPins[3],LOW);
}