Understanding how methods and pointers inside a function work
"There are no stupid questions, just stupid answers"


  Why there is a Method "Print" not a Data Type inside the Function Argument List?


There is no "Method" Print in the argument list.  There is a reference (not a pointer which would be a * not a &amp;) to an object called printer that is of type Print.  The code you have provided doesn't define Print but its a could guess that it is probably something to do with printing.  By supplying the printer argument you can print this data to anything that inherits from the Print base class, Serial is a good possibility, but you could write a class that derived from Print and wrote the data to an LED matrix, etc.
I can tell its not a Method, because you are calling the print method of printer, so it has to be either a class or structure.


  The function will print some data on a Serial Monitor or SD Card


I can see why you thought that but you are being too specific, it prints to anything that derives from Print, Serial and dataFile derive from it, but they might not be the only things.


  I need to send one Method through the left value of a pointer and 7 integers. I can't understand why a method.


An example might help:

class CGPrinter : public Print
{
  // Some code....
  virtual void print (const char* input) {// do something}
}

void loop()
{
  CGPrinter cgp;
  printImuData (Serial, 1,2,3,4,5,6,7);
  printImuData (cgp, 1,2,3,4,5,6,7);
}


Serial is an object, a variable, a specific instance of type of class that can print data.

CGPrinter is my new super sexy printing class that will read the characters that you 'print'.  To print the 7 integers to CG's printer class is exactly the same call as the one to write it to the Serial Monitor, because both classes derive from Print.


  
  What data do I get back from it?
  


Yes, correct on both points.

Does it make more sense now?  If not, just say and I'll try and clarify it.